/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package net.ieslaferreria.infoCiutat;


import java.util.Enumeration;
import java.util.Vector;

/*
 * FECHA      HORA     NOMBRE                    COMENTARIO
 *------------------------------------------------------------------------
 * 09/05/08   19:16  JAVI                    creació implementació          
 * 22/05/08   17:30  JAVI                    codificació de métodes
 * 26/05/08   18:20  JAVI                    codificació de métodes         
 * 28/05/08   18.11  JAVI                    herencia de Root
 *
 * @author Alex, Javi, David y Sergio
 */

import org.garret.perst.Iterator;
import org.garret.perst.Key;
import org.garret.perst.Storage;

public class PuntManagerImpl extends Root implements PuntManager {


  
  public void afegirPunts(Vector v){
      int i=0;
      while(i < v.size()){
      Vector vp = (Vector) v.elementAt(i); // conté 1 punt 
      Punt p = new PuntImpl();
              p.setCodi(Integer.parseInt(String.valueOf(vp.elementAt(0))));
              p.setNom((String) vp.elementAt(1));
              p.setLongitud(Integer.parseInt(String.valueOf(vp.elementAt(2))));
              p.setLatitud(Integer.parseInt(String.valueOf(vp.elementAt(3))));
              p.setCiutat((String)vp.elementAt(4));
              p.setLinia((String)vp.elementAt(5));
              p.setCodiXarxa(Integer.parseInt(String.valueOf(vp.elementAt(6))));
              p.setTipus((TipusPunt) vp.elementAt(7));
              p.setCoordenadaX(Integer.parseInt(String.valueOf(vp.elementAt(8))));
              p.setCoordenadaY(Integer.parseInt(String.valueOf(vp.elementAt(9))));
              p.setArestes((Vector) vp.elementAt(10));
              p.setInformacio((Vector) vp.elementAt(11));      
              super.afegirDadesPerst(p);
              i++;
      }
  }
  
  
  public void afegirPuntsInteres(Vector v){
      int i=0;
      while(i < v.size()){
               Vector vpi = (Vector) v.elementAt(i);
               PuntInteres pi = new PuntImpl();
              pi.setCodi(Integer.parseInt(String.valueOf(vpi.elementAt(0))));
              pi.setNom((String) vpi.elementAt(1));
              pi.setLongitud(Integer.parseInt(String.valueOf(vpi.elementAt(2))));
              pi.setLatitud(Integer.parseInt(String.valueOf(vpi.elementAt(3))));
              pi.setCiutat((String)vpi.elementAt(4));
              pi.setLinia((String)vpi.elementAt(5));
              pi.setCodiXarxa(Integer.parseInt(String.valueOf(vpi.elementAt(6))));
              pi.setTipus((TipusPunt) vpi.elementAt(7));
              pi.setCoordenadaX(Integer.parseInt(String.valueOf(vpi.elementAt(8))));
              pi.setCoordenadaY(Integer.parseInt(String.valueOf(vpi.elementAt(9))));
              pi.setArestes((Vector) vpi.elementAt(10));
              pi.setInformacio((Vector) vpi.elementAt(11));      
              super.afegirDadesPerst(pi);
              i++;
          
      }
  }
    public Vector getLlistaNomsContactes() {
        Iterator i = nomPunt.iterator();
        Vector v=new Vector();
        
            while( i.hasNext() ){
                PuntInteres pi = (PuntInteres)i.next();
                v.addElement(pi);
             }
        
      return v;
    
    }
    
    public Vector cercaContacte(String cadena) {
      Iterator i = nomPunt.prefixIterator(cadena);
      Vector v = new Vector(); 
     
        while(i.hasNext()){
            Punt pi = (PuntInteres)i.next();
            v.addElement(String.valueOf(pi.getCodi()));
        }
      return v;
    }

    public PuntInteres getContacte(int codi) {
        PuntInteres pi = (PuntInteres)idPunt.get(new Key(codi));
        return pi;
    }

    public Vector getLlistaPuntInteres() {
        Iterator i = idPunt.iterator();
        Vector v=new Vector();
        
            while( i.hasNext() ){
                PuntInteres pi = (PuntInteres)i.next();
                v.addElement(pi);
             }
        
      return v;
    
    }

    public Vector cercaPuntInteres(String cadena) {
        Iterator i = nomPunt.prefixIterator(cadena);
      Vector v = new Vector(); 
     
     while(i.hasNext()){
         Punt pi = (PuntInteres)i.next();
         v.addElement(String.valueOf(pi.getCodi()));
     }
      return v;
    }

    public PuntInteres getPuntInteres(int codi) {
       PuntInteres pi = (PuntInteres)idPunt.get(new Key(codi));
        return pi;
    }

    public Vector getLlistaPunts() {
        Iterator i = idPunt.iterator();
        Vector v=new Vector();
        
            while( i.hasNext() ){
                Punt p = (Punt)i.next();
                v.addElement(p);
             }
        
      return v;
    }

    public Vector cercaPunt(String cadena) {
        Iterator i = nomPunt.prefixIterator(cadena);
      Vector v = new Vector(); 
       
       
     while(i.hasNext()){
         Punt p = (Punt)i.next();
         v.addElement(String.valueOf(p.getCodi()));
     }
      return v;
       
    }

    public Punt getPunt(int codi) {
        Punt p = (Punt)idPunt.get(new Key(codi));
        return p;
    }

    public PuntInteres getPuntInteres(String nomPuntInteres) {
        PuntInteres pi = (PuntInteres)nomPunt.get(nomPuntInteres);
        return pi;
    }

    public PuntInteres getContacte(String nomContacte) {
        PuntInteres pi = (PuntInteres)nomPunt.get(nomContacte);   
        return pi;
    }

    public Punt getCruilla(String nomCarrer, String nomCarrer2) {
       ArestaManager am = new ArestaManagerImpl();
       Punt ret=new PuntImpl();
       Vector v = new Vector();
       
       int i=0, j = 0, x = 0;
       v = am.cerca(nomCarrer);
       
      
      while(i < v.size()){
        
         Aresta a =(Aresta)v.elementAt(i);
         Punt pi = a.getPuntInici();
         Vector vi = pi.getArestes();
         
         do{
         Aresta ax = (Aresta) vi.elementAt(j);
         String nom = new String();
         nom = ax.getNom();
          x = nom.compareTo(nomCarrer2);
         }while(i < vi.size() && x != 0 );
         if(x == 0){
            ret = pi; 
         }else{
                Punt pf = a.getPuntFinal();
                Vector vf = pf.getArestes();
         
                do{
                    Aresta ax = (Aresta) vf.elementAt(j);
                    String nom = new String();
                    nom = ax.getNom();
                    x = nom.compareTo(nomCarrer2);
                }while(i < vf.size() && x != 0 );
            if(x==0){
             ret = pf;
            }else{
                 i++;   
            }
       }
          
      }
       return ret;
      
    }
    
    public PuntManagerImpl(){}
    
    public PuntManagerImpl(Storage db){
        super(db);
       
    }

}
